home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 25 / CU Amiga Magazine's Super CD-ROM 25 (1998)(EMAP Images)(GB)(Track 1 of 2)[!][issue 1998-08].iso / CUCD / Programming / Triton / Source / classes / checkbox.c < prev    next >
C/C++ Source or Header  |  1998-05-23  |  5KB  |  184 lines

  1. /*
  2.  *  OpenTriton -- A free release of the triton.library source code
  3.  *  Copyright (C) 1993-1998  Stefan Zeiger
  4.  *
  5.  *  This program is free software; you can redistribute it and/or modify
  6.  *  it under the terms of the GNU General Public License as published by
  7.  *  the Free Software Foundation; either version 2 of the License, or
  8.  *  (at your option) any later version.
  9.  *
  10.  *  This program is distributed in the hope that it will be useful,
  11.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.  *  GNU General Public License for more details.
  14.  *
  15.  *  You should have received a copy of the GNU General Public License
  16.  *  along with this program; if not, write to the Free Software
  17.  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18.  *
  19.  */
  20.  
  21.  
  22. /****** triton.library/class_CheckBox ******
  23. *
  24. *   NAME    
  25. *    class_CheckBox -- A GadTools checkbox gadget
  26. *
  27. *   SUPERCLASS
  28. *    class_DisplayObject
  29. *
  30. *   SYNOPSIS
  31. *    TROB_CheckBox
  32. *
  33. *   ATTRIBUTES
  34. *    <Default>        : <unused>
  35. *    TRAT_Value       : BOOL checked
  36. *                       [create, set, get]
  37. *
  38. *   APPLICATION MESSAGES
  39. *    TRMS_NEWVALUE is sent when the checkbox has been toggled. trm_Data
  40. *    contains 0 for an unselected checkbox and any other value for a
  41. *    selected checkbox.
  42. *
  43. ******/
  44.  
  45.  
  46. /////////////////////////////////////////////////////////////////////////////////////////////////////////////
  47. //////////////////////////////////////////////////////////////////////////////////////// Include our stuff //
  48. /////////////////////////////////////////////////////////////////////////////////////////////////////////////
  49.  
  50. #define TR_THIS_IS_TRITON
  51.  
  52. #include <libraries/triton.h>
  53. #include <clib/triton_protos.h>
  54. #include "/internal.h"
  55. #include "checkbox.def"
  56.  
  57.  
  58. /////////////////////////////////////////////////////////////////////////////////////////////////////////////
  59. ////////////////////////////////////////////////////////////////////////////////////////////// Object data //
  60. /////////////////////////////////////////////////////////////////////////////////////////////////////////////
  61.  
  62. #define OBJECT (&(object->DO.O))
  63. #define DISPLAYOBJECT (&(object->DO))
  64. #define CHECKBOX object
  65.  
  66.  
  67. /////////////////////////////////////////////////////////////////////////////////////////////////////////////
  68. ////////////////////////////////////////////////////////////////////////////////////////////////// Methods //
  69. /////////////////////////////////////////////////////////////////////////////////////////////////////////////
  70.  
  71. TR_METHOD(CheckBox,NEW,NewData)
  72. {
  73.   if(!TRDP_DisplayObject_NEW(object,messageid,data,metaclass->trc_SuperClass)) return NULL;
  74.  
  75. #ifndef TR_OS39
  76.   if(TR_Global.trg_OSVersion>=39)
  77.   {
  78. #endif
  79.     DISPLAYOBJECT->MinHeight=max(CHECKBOX_HEIGHT,data->project->trp_TotalPropFontHeight);
  80.     DISPLAYOBJECT->MinWidth=max(CHECKBOX_WIDTH,data->project->trp_PropFont->tf_YSize);
  81. #ifndef TR_OS39
  82.   }
  83.   else
  84.   {
  85.     DISPLAYOBJECT->MinHeight=CHECKBOX_HEIGHT;
  86.     DISPLAYOBJECT->MinWidth=CHECKBOX_WIDTH;
  87.   }
  88. #endif
  89.  
  90.   data->project->trp_IDCMPFlags|=CHECKBOXIDCMP;
  91.   return (ULONG)object;
  92. }
  93.  
  94.  
  95. TR_SIMPLEMETHOD(CheckBox,INSTALL)
  96. {
  97.   TRDP_DisplayObject_INSTALL(object,messageid,data,metaclass->trc_SuperClass);
  98.   if(DISPLAYOBJECT->PrivData=(ULONG)TR_CreateGadgetTags
  99.      (OBJECT->Project,
  100.       OBJECT,
  101.       CHECKBOX_KIND,
  102.       DISPLAYOBJECT->Left,
  103.       DISPLAYOBJECT->Top,
  104.       DISPLAYOBJECT->Width,
  105.       DISPLAYOBJECT->Height,
  106.       GTCB_Scaled,    TRUE,
  107.       GTCB_Checked,   CHECKBOX->Checked,
  108.       GA_Disabled,    TR_DO_DISABLED,
  109.       TAG_END)) return 1L;
  110.   else return NULL;
  111. }
  112.  
  113.  
  114. TR_METHOD(CheckBox,SETATTRIBUTE,SetAttributeData)
  115. {
  116.   switch(data->attribute)
  117.     {
  118.     case TRAT_Value:
  119.       if(CHECKBOX->Checked!=data->value)
  120.     {
  121.       CHECKBOX->Checked=data->value;
  122.       if(DISPLAYOBJECT->Installed)
  123.         GT_SetGadgetAttrs((struct Gadget *)DISPLAYOBJECT->PrivData,OBJECT->Project->trp_Window,
  124.                   NULL,GTCB_Checked,CHECKBOX->Checked,
  125.                   GA_Disabled,TR_DO_DISABLED,TAG_END);
  126.     }
  127.       return 1L;
  128.  
  129.     default:
  130.       return TRDP_DisplayObject_SETATTRIBUTE(object,messageid,data,metaclass->trc_SuperClass);
  131.     }
  132. }
  133.  
  134.  
  135. TR_SIMPLEMETHOD(CheckBox,GETATTRIBUTE)
  136. {
  137.   switch((ULONG)data)
  138.   {
  139.     case TRAT_Value:
  140.       return CHECKBOX->Checked;
  141.     default:
  142.       return TRDP_DisplayObject_GETATTRIBUTE(object,messageid,data,metaclass->trc_SuperClass);
  143.   }
  144. }
  145.  
  146.  
  147. TR_METHOD(CheckBox,KEYDOWN_DISABLED_ENABLED,EventData)
  148. {
  149.   struct TR_Message *m;
  150.  
  151.   if((messageid==TROM_KEYDOWN) && (m=TR_CreateMsg(Self.DO.O.Project->trp_App)))
  152.   {
  153.     CHECKBOX->Checked=!(CHECKBOX->Checked);
  154.     m->trm_ID=DISPLAYOBJECT->ID;
  155.     m->trm_Class=TRMS_NEWVALUE;
  156.     m->trm_Data=CHECKBOX->Checked;
  157.   }
  158.   GT_SetGadgetAttrs((struct Gadget *)DISPLAYOBJECT->PrivData,OBJECT->Project->trp_Window,NULL,
  159.             GTCB_Checked,CHECKBOX->Checked,GA_Disabled,TR_DO_DISABLED,
  160.             TAG_END);
  161.   return 1;
  162. }
  163.  
  164.  
  165. TR_METHOD(CheckBox,EVENT,EventData)
  166. {
  167.   struct TR_Message *m;
  168.  
  169.   if((data->imsg->Class==IDCMP_GADGETUP)&&(data->imsg->IAddress==(APTR)(DISPLAYOBJECT->PrivData)))
  170.   {
  171.     CHECKBOX->Checked=
  172.       ((((struct Gadget *)(data->imsg->IAddress))->Flags)&GFLG_SELECTED)?TRUE:FALSE;
  173.     if(m=TR_CreateMsg(Self.DO.O.Project->trp_App))
  174.       {
  175.     m->trm_ID=DISPLAYOBJECT->ID;
  176.     m->trm_Class=TRMS_NEWVALUE;
  177.     m->trm_Data=CHECKBOX->Checked;
  178.       }
  179.     TR_SetAttribute(OBJECT->Project,DISPLAYOBJECT->ID,TRAT_Value,CHECKBOX->Checked);
  180.     return 1;
  181.   }
  182.   else return 0;
  183. }
  184.